Red Chainer で日英翻訳を実装する
/icons/hr.icon
2019-11-19
いったん日英翻訳もストップか?という気持ちになっている...
Red Chainer で loss.unchain_backward をやった時に 'method_missing': undefined method 'call' for #<WeakRef:0x00007f8891c8c2d0> (NoMethodError) が出る問題が解決していない
RNNやseq2seqに対する理解が乏しくて「ナニコレ感」が強い
てか、loss.unchain_backward って何?必要なの?まあ必要なんだろうけど。
雑に loss.unchain_backward をコメントアウトして回してみてる笑
なんかエラー出た
code:sh
20 iter, 0 epoch / 39 epochs
Traceback (most recent call last):
8: from examples/ptb/train_ptb.rb:271:in `<main>'
7: from /Users/tanaka.kentaro/personal-repo/red-chainer/lib/chainer/training/trainer.rb:111:in `run'
6: from /Users/tanaka.kentaro/personal-repo/red-chainer/lib/chainer/reporter.rb:60:in `scope'
5: from /Users/tanaka.kentaro/personal-repo/red-chainer/lib/chainer/training/trainer.rb:113:in `block in run'
4: from /Users/tanaka.kentaro/personal-repo/red-chainer/lib/chainer/training/trainer.rb:113:in `each'
3: from /Users/tanaka.kentaro/personal-repo/red-chainer/lib/chainer/training/trainer.rb:114:in `block (2 levels) in run'
2: from /Users/tanaka.kentaro/personal-repo/red-chainer/lib/chainer/training/extensions/progress_bar.rb:74:in `call'
1: from /Users/tanaka.kentaro/personal-repo/red-chainer/lib/chainer/training/extensions/progress_bar.rb:74:in `+'
/Users/tanaka.kentaro/personal-repo/red-chainer/lib/chainer/training/extensions/progress_bar.rb:74:in `to_r': Infinity (FloatDomainError)
どうしようかなぁ
ちゃんと動くのかは回してみないとわからん
このままだと発表内容に自然言語処理へのアプローチを何も織込めない感じになりそうだもんね。
あとは興味として chainer 本家のseq2seqを回してみるのはやりたい
/icons/hr.icon
2019-11-18
昨日実行して帰ったミニ実験、セグフォっていた...
code:sh
epoch: 5 - dataset: 112 / 1400, start. -> /Users/tanaka.kentaro/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/numo-narray-0.9.1.5/lib/numo/narray/extra.rb:1117: BUG Segmentation fault at 0x0000000108fd39e0 ミニ実験の設定
例文データ数: 2,000 (学習用1,400 テスト用600)
埋め込みサイズ: 100
エポック: 10
crash log report はここで確認できる
code:sh
$ cat ~/Library/Logs/DiagnosticReports/ruby_2019-11-17-213542_PMAC581S.crash
さっきやったプチテスト(所要時間は約15分くらい?)
設定
例文データ数: 100 (学習用70 テスト用30)
埋め込みサイズ: 100
エポック: 10
結果(一部)
code:sh
test000000026
- jpn: 『 北 の 国 から 』 は 、 北海道 富良野 市 を 舞台 に し た フジテレビジョン 制作 の テレビ ドラマ 。
- ans: " From the North Country " is a TV drama produced by Fuji TV and set in Furano in Hokkaido .
- pre: " was said the the hair . <EOS> <EOS> the . <EOS> <EOS> the . <EOS> <EOS> the . <EOS> <EOS> the . <EOS> <EOS> the . <EOS> <EOS> the
test000000027
- jpn: 結果 、 雨 の 日 は 部屋 の 中 で ボール 遊び を し て い ます 。
- ans: As a result , we play ball inside on rainy days .
- pre: that that that he'd " " " " " " " " " " " " " " " " " " " " " " said " " "
test000000028
- jpn: 「 何 を 考え てる の ? 」 「 別に ・ ・ ・ 」
- ans: " What are you thinking about ? " " Nothin' ... "
- pre: that the that that that that that that he'd that he'd that he'd previous that he'd previous that he'd previous that he'd previous that he'd previous that he'd he'd he'd
test000000029
- jpn: 身命 を かけ て 職務 を 実践 し 、 すべて の 警察官 の 心 に 火 を ともし て くれ まし た 。
- ans: He risked his life to carry out his duty and inspired police officers everywhere .
- pre: I can't can't to a a . <EOS> <EOS> . <EOS> <EOS> . <EOS> <EOS> . <EOS> <EOS> the . <EOS> <EOS> the hair <EOS> the . <EOS> <EOS> the
全然ダメすなぁ。まあ多分バグっている。
このまま無闇にRed Chianerでのseq2seq実装を進めていても良くなさそう
seq2seqの前にRNNを理解していないので、RNNの応用であるseq2seqをやろうとするのは早すぎた感はある
ブログ通りに書いてみてワンチャンうまく動くのを期待していた
この後どうするか
RNNを理解するために何かやる
youchanさんのPTBのサンプルを実行&解読して、理解する 実行した
code:sh
$ bundle exec ruby examples/ptb/train_ptb.rb
Traceback (most recent call last):
11: from examples/ptb/train_ptb.rb:271:in `<main>'
10: from /Users/tanaka.kentaro/personal-repo/red-chainer/lib/chainer/training/trainer.rb:111:in `run'
9: from /Users/tanaka.kentaro/personal-repo/red-chainer/lib/chainer/reporter.rb:60:in `scope'
8: from /Users/tanaka.kentaro/personal-repo/red-chainer/lib/chainer/training/trainer.rb:112:in `block in run'
7: from /Users/tanaka.kentaro/personal-repo/red-chainer/lib/chainer/training/trainer.rb:112:in `call'
6: from /Users/tanaka.kentaro/personal-repo/red-chainer/lib/chainer/training/standard_updater.rb:36:in `update'
5: from examples/ptb/train_ptb.rb:134:in `update_core'
4: from /Users/tanaka.kentaro/personal-repo/red-chainer/lib/chainer/variable.rb:280:in `unchain_backward'
3: from /Users/tanaka.kentaro/personal-repo/red-chainer/lib/chainer/function_node.rb:232:in `unchain'
2: from /Users/tanaka.kentaro/personal-repo/red-chainer/lib/chainer/function_node.rb:232:in `each'
1: from /Users/tanaka.kentaro/personal-repo/red-chainer/lib/chainer/function_node.rb:233:in `block in unchain'
/Users/tanaka.kentaro/.rbenv/versions/2.6.5/lib/ruby/2.6.0/delegate.rb:87:in method_missing': undefined method call' for #<WeakRef:0x00007fc35b567dd8> (NoMethodError) なんかエラー出た
!!!
無理んご。youchanさんに聞いてみるか...
てかこれ動かないのかあ〜
書籍や記事を読む
seq2seqをpythonで動かしてみる
chainer本家のseq2seqサンプルをとりあえず動かしてみるとか?
資料づくり....
発表練習....
NStepLSTM がなんなのか、ざっくりわかった
/icons/hr.icon
2019-11-17
やるぞ〜。
まずはRed Chainer のブランチ整理から、かな。 -> kagoshima-rubykaigi-01 ブランチを作った /icons/pass.icon
個人PCが沈黙したので出社した
Translatorクラスを作っていくぞ〜
徐々にわかってきたぞ〜〜うお〜〜
Vocabularyクラスを少し直した。idでstringを返していたけどIntegerを返すようにしたよ。
h_i_list メソッドを実装していたら、Variablesに volatile=volatile を渡していて「なんじゃ?」となった
code:py
volatile = 'on' if test else 'off'
for word in words:
wid = self.source_word2idword x_i = self.embed_x(Variable(np.array(wid, dtype=np.int32), volatile=volatile)) Variable(hoge, volatile='on') # 'on' or 'off' という感じだ。
volatile argument is not supported anymore.
と書いてあった
で、結局なに?
これまでVariableには「volatile(揮発性)」という引数をTrueにすることで、計算グラフの情報を持たせない設定にすることができました。
ほうほう
chainer2では
code:py
# Chainer v2
x_data = ... # ndarray
x = chainer.Variable(x)
with chainer.no_backprop_mode():
y = model(x)
に変更されました。要するに「volatile」揮発性という引数をなくして、with構文で記述するように実装されたということです。
なるほどね。
Red Chainerにはまだなさそう
csvに " だけの行があってエラー出ている〜
これは liberal_parsing: true では防げないのか〜。
これは解決した
けどまた別のところでつまりんこ
loss.unchain_backward で
'method_missing': undefined method 'call' for #<WeakRef:0x00007f8891c8c2d0> (NoMethodError)
code:rb
def unchain
@outputs.each do |y|
y_ref = y.()
unless y_ref.nil?
y_ref.unchain
end
end
@inputs = nil
end
なので、@outputs の各要素に call メソッドが必要なのだと思う
@outputsってなに?
@outputs = ret.map { |y| WeakRef.new(y.node) } と書いてある
ret ってなに?
ret = outputs.map { |y| Chainer::Variable.new(y, requires_grad: requires_grad) } と書いてある
outputs ってなに?
outputs = forward(in_data) と書いてある
完全に良くわからなくなった
わかるところをやろう....
Trainerクラスの最後の未実装メソッド test を書く。メソッド名が test だと気持ち悪いので、 inference にした
テスト用データを使って推論するメソッドなので。
Chainer::Functions::Activation::Softmax がなくて記事通りの計算はできなそう
/icons/hr.icon
2019-11-16
対訳データ
code:jpn_eng_sentences.csv
ムーリエルは20歳になりました。 Muiriel is 20 now.
すぐに戻ります。 I will be back soon.
すぐに諦めて昼寝をするかも知れない。 I may give up soon and just nap instead.
...
日本語辞書
code:jpn_dictionary.csv
ムーリエル
は
2
...
英語辞書
code:eng_dictionary.csv
Muiriel
is
20
...
とりあえず、Vocabulary クラスを作ろうかな。/icons/pass.icon
ここまででいったんマージした
そのあと、処理の全体像を実装していこう。/icons/pass.icon
seq2seq-outline ブランチで進めていくぞ〜
モデルの中身を書くのは明日やる〜
てか、Red Chainerのブランチ調整もしないとな。
git remote add はしておいたのでブランチ考えて自作のブランチとyouchanさんのlstmブランチをマージすればOK
コンフリクトしないことを祈る :pray: